#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
快速测试AI分块功能
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app.processors.ai_chunker import AIDocumentChunker
from app.core.config import config


def test_quick_chunking():
    """快速测试分块功能"""
    
    # 短文本测试
    short_text = """
    人工智能是计算机科学的一个分支。它致力于让计算机模拟人类智能。
    机器学习是人工智能的重要技术，通过数据训练让计算机学习。
    """
    
    # 中等长度文本
    medium_text = """
    人工智能（Artificial Intelligence，AI）是计算机科学的一个分支，它企图了解智能的实质，
    并生产出一种新的能以人类智能相似的方式做出反应的智能机器。该领域的研究包括机器人、
    语言识别、图像识别、自然语言处理和专家系统等。
    
    机器学习是人工智能的一个重要分支，它使计算机能够在没有明确编程的情况下学习和改进。
    通过分析大量数据，机器学习算法可以识别模式并做出预测或决策。
    """
    
    print("🚀 快速测试AI分块功能")
    print("=" * 50)
    
    # 测试不同模型
    models = [
        ("deepseek-r1:1.5b", "快速模型"),
        ("qwen3:4b", "中文友好模型")
    ]
    
    for model_name, description in models:
        print(f"\n🔍 测试模型: {model_name} ({description})")
        print("-" * 40)
        
        try:
            chunker = AIDocumentChunker(model_name=model_name)
            
            # 测试短文本
            print(f"📝 短文本测试 ({len(short_text)} 字符):")
            start_time = time.time()
            chunks = chunker.chunk_with_ai(short_text, "semantic")
            end_time = time.time()
            
            print(f"  处理时间: {end_time - start_time:.2f} 秒")
            print(f"  块数: {len(chunks)}")
            for i, chunk in enumerate(chunks, 1):
                print(f"    块 {i}: {chunk[:50]}...")
            
            # 测试中等文本
            print(f"\n📝 中等文本测试 ({len(medium_text)} 字符):")
            start_time = time.time()
            chunks = chunker.chunk_with_ai(medium_text, "semantic")
            end_time = time.time()
            
            print(f"  处理时间: {end_time - start_time:.2f} 秒")
            print(f"  块数: {len(chunks)}")
            for i, chunk in enumerate(chunks, 1):
                print(f"    块 {i}: {chunk[:50]}...")
                
        except Exception as e:
            print(f"  ❌ 测试失败: {e}")
    
    print("\n🎉 测试完成！")


def test_fallback_mechanism():
    """测试回退机制"""
    
    print("\n🔄 测试回退机制")
    print("=" * 50)
    
    # 模拟超时情况
    long_text = "这是一个测试文本。" * 1000  # 约10000字符
    
    chunker = AIDocumentChunker(model_name="deepseek-r1:1.5b")
    
    print(f"📝 长文本测试 ({len(long_text)} 字符):")
    start_time = time.time()
    chunks = chunker.chunk_with_ai(long_text, "semantic")
    end_time = time.time()
    
    print(f"  处理时间: {end_time - start_time:.2f} 秒")
    print(f"  块数: {len(chunks)}")
    print(f"  平均块大小: {sum(len(chunk) for chunk in chunks) / len(chunks):.1f} 字符")


if __name__ == "__main__":
    import time
    
    print("🔧 AI分块功能快速测试")
    print("=" * 60)
    
    # 检查Ollama服务
    try:
        import requests
        response = requests.get("http://localhost:11434/api/tags", timeout=5)
        if response.status_code == 200:
            print("✅ Ollama服务正常运行")
        else:
            print("❌ Ollama服务异常")
            sys.exit(1)
    except Exception as e:
        print(f"❌ 无法连接到Ollama服务: {e}")
        print("请确保Ollama服务正在运行: ollama serve")
        sys.exit(1)
    
    # 运行测试
    test_quick_chunking()
    test_fallback_mechanism()
    
    print("\n📝 建议:")
    print("1. 如果AI分块速度慢，建议使用 'deepseek-r1:1.5b' 模型")
    print("2. 如果AI分块失败，系统会自动回退到传统分块")
    print("3. 长文本会自动使用传统分块以避免超时") 